home *** CD-ROM | disk | FTP | other *** search
Text File | 1997-06-28 | 1.6 KB | 66 lines | [TEXT/CWIE] |
- // ArrayLoop.h
-
- #ifndef ArrayLoop_h
- #define ArrayLoop_h
-
- #ifndef ArrayOf_h
- #include "ArrayOf.h"
- #endif
-
- template < class Element >
- class ArrayLoop
- {
- private:
- Element *position;
- Element *const stop;
- Element *const elementZero;
-
- public:
- inline ArrayLoop( ArrayOf<Element> array );
- inline ArrayLoop( ArrayOf<Element> array, uint32 begin, uint32 end );
- inline ArrayLoop( ArrayOf<Element> array, Range<uint32> range );
-
- bool Finished() const { return position >= stop; }
- bool Unfinished() const { return position < stop; }
-
- Element *operator++() { return ++position; }
- Element *operator++(int) { return position++; }
-
- Element& operator*() const { return *position; }
- Element *operator->() const { return position; }
- };
-
- template < class Element >
- ArrayLoop<Element>::ArrayLoop( ArrayOf<Element> array )
- : position( array.Start() ),
- elementZero( array.Start() ),
- stop( array.End() )
- {
- Assert( !array.Null() );
- }
-
- template < class Element >
- ArrayLoop<Element>::ArrayLoop( ArrayOf<Element> array,
- uint32 begin,
- uint32 end )
- : position( array.Start() + begin ),
- elementZero( array.Start() ),
- stop( array.Start() + end )
- {
- Assert( begin <= end );
- Assert( end <= array.Length() );
- }
-
- template < class Element >
- ArrayLoop<Element>::ArrayLoop( ArrayOf<Element> array,
- Range<uint32> range )
- : position( array.Start() + range.Start() ),
- elementZero( array.Start() ),
- stop( array.Start() + range.End() )
- {
- Assert( range.Start() <= range.End() );
- Assert( range.End() <= array.Length() );
- }
-
- #endif
-